home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / gus / vts139b.zip / VTSHELL.PAS < prev    next >
Pascal/Delphi Source File  |  1993-04-24  |  3KB  |  160 lines

  1. UNIT VTShell;
  2.  
  3. INTERFACE
  4.  
  5.  
  6.  
  7.  
  8. PROCEDURE DoWindowShell;
  9.  
  10.  
  11.  
  12.  
  13. IMPLEMENTATION
  14.  
  15. USES Dos, VTGlobal, VTScreens, Heaps, BiosVideo;
  16.  
  17.  
  18. VAR
  19.   BiosVMode      : BYTE ABSOLUTE 0:$449;
  20.   BiosVColumns   : WORD ABSOLUTE 0:$44A;
  21.   BiosVScrSize   : WORD ABSOLUTE 0:$44C;
  22.   BiosVScrOffset : WORD ABSOLUTE 0:$44E;
  23.   BiosVPage      : BYTE ABSOLUTE 0:$462;
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. PROCEDURE MyInt10(_Flags, _CS, _IP, _AX, _BX, _CX, _DX,
  33.                           _SI, _DI, _DS, _ES, _BP: Word); INTERRUPT;
  34.  
  35.   PROCEDURE CallOldInt10;
  36.     CONST
  37.       R       : Registers = (AX:0);
  38.       SavePtr : POINTER   = NIL;
  39.       Sema    : BYTE      = 0;
  40.     BEGIN
  41.  
  42.       INC(Sema);
  43.  
  44.       IF Sema = 1 THEN
  45.         BEGIN
  46.           GetIntVec($10, SavePtr);
  47.           SetIntVec($10, Int10Ptr);
  48.         END;
  49.  
  50.       R.AX    := _AX;
  51.       R.BX    := _BX;
  52.       R.CX    := _CX;
  53.       R.DX    := _DX;
  54.       R.SI    := _SI;
  55.       R.DI    := _DI;
  56.       R.ES    := _ES;
  57.       R.DS    := _DS;
  58.       R.BP    := _BP;
  59.       R.Flags := _Flags;
  60.  
  61.       Intr($10, R);
  62.  
  63.       _AX    := R.AX;
  64.       _BX    := R.BX;
  65.       _CX    := R.CX;
  66.       _DX    := R.DX;
  67.       _SI    := R.SI;
  68.       _DI    := R.DI;
  69.       _ES    := R.ES;
  70.       _DS    := R.DS;
  71.       _BP    := R.BP;
  72.       _Flags := R.Flags;
  73.  
  74.       IF Sema = 1 THEN
  75.         SetIntVec($10, SavePtr);
  76.  
  77.       DEC(Sema);
  78.  
  79.     END;
  80.  
  81.   BEGIN
  82.  
  83.     BiosVMode      := 3;
  84.     BiosVColumns   := 80;
  85.     BiosVScrSize   := 80*50;
  86.     BiosVScrOffset := 0;
  87.     BiosVPage      := 0;
  88. {
  89.     CallOldInt10(_Flags, _AX, _BX, _CX, _DX, _SI, _DI, _DS, _ES, _BP);
  90. }
  91.     CASE HI(_AX) OF
  92.        1,
  93.        2,
  94.        3,
  95.  
  96.        6,
  97.        7,
  98.        8,
  99.        9,
  100.       10,
  101.       15: ;
  102.       14: CallOldInt10;
  103.     ELSE
  104.  
  105. {      _AX := $ABAB;}
  106.  
  107.     END;
  108.  
  109.   END;
  110.  
  111.  
  112.  
  113.  
  114. PROCEDURE DoWindowShell;
  115.   VAR
  116.     HeapSize      : LONGINT;
  117.     SaveMode      : BYTE;
  118.     SaveColumns   : WORD;
  119.     SaveScrSize   : WORD;
  120.     SaveScrOffset : WORD;
  121.     SavePage      : BYTE;
  122.   BEGIN
  123.  
  124.     SetUser(F8Demo);
  125.  
  126.     SaveMode      := BiosVMode;
  127.     SaveColumns   := BiosVColumns;
  128.     SaveScrSize   := BiosVScrSize;
  129.     SaveScrOffset := BiosVScrOffset;
  130.     SavePage      := BiosVPage;
  131.  
  132.     GetIntVec($10, Int10Ptr);
  133.     SetIntVec($10, @MyInt10);
  134.  
  135.     SetCursor(0, 0, 0);
  136.     UnderCursor;
  137.  
  138.     HeapSize := Heap.HTotalAvail;
  139.     ShrinkSystemHeap(0);
  140.     SwapVectors;
  141.     Exec(ShellPath, ShellParam);
  142.     SwapVectors;
  143.     ShrinkSystemHeap(HeapSize);
  144.  
  145.     SetIntVec($10, Int10Ptr);
  146.     Int10Ptr := NIL;
  147.  
  148.     BiosVMode      := SaveMode;
  149.     BiosVColumns   := SaveColumns;
  150.     BiosVScrSize   := SaveScrSize;
  151.     BiosVScrOffset := SaveScrOffset;
  152.     BiosVPage      := SavePage;
  153.  
  154.   END;
  155.  
  156.  
  157.  
  158.  
  159. END.
  160.